<?php
namespace User\Controller;
use Think\Controller;
use User\Api\UserApi;
use Api\Controller\ImageController;
class UserController extends Controller {
    
    public function index(){
        if(is_login()){
            $this->display();
        } else {
            $this->redirect("User/login");
        }
    }

    /**
     * 本地用户注册
     * @param type $username 用户名
     * @param type $password 密码
     * @param type $verify 验证码
     */
    public function register($username="", $password="", $verify=""){
        if(is_login()){
            $this->display('index');
            return;
        }
        if(IS_POST){
//            if(!check_verify($verify)){
//                $this->error('验证码错误 ！');
//            }
            $id = D('User')->register($username, $password);
            if($id > 0){
                $model = M("User_model");
                $data = array("uid" => $id, "username" => $username, "reg_time" => NOW_TIME, "last_login_time" => NOW_TIME, "status" => 1);
                $model->data($data)->add();
                $this->redirect("User/login");
                
                //TODO注册成功后，如果跳转到登录成功页面，需要走过登录流程，登录流程在同一个控制器中，是否考虑将登录做一个api接口调用。。
            }else{
                $this->error($this->showRegError($id));
            }
        }else{
            //TODO 是否已经登录，如已经登录则直接跳转到登录后页面
            $this->display();   //显示注册页面
        }
    }


    /**
     * 用户登录，包括本地用户和第三方用户
     * @param type $username 用户名
     * @param type $password 密码
     * @param type $verify 验证码
     * @param type $remember 是否记住密码
     * @param type $is_third 是否是第三方登录
     */
    public function login($username="", $password="", $verify="", $remember="", $is_third=0){
        if(is_login()){
            $this->display('index');
            return;
        }
        if(IS_POST){
//            if(!check_verify($verify)){
//                $this->error('验证码错误！');
//            }
            $user = new UserApi();
            $id = $user->login($username, $password, $remember, $is_third);
            if($id > 0){
                $this->assign("username", $username);
                $this->display('index');
            }else{
                switch ($id){
                    case -1: 
                        $this->error("用户名不存在！");
                        break;
                    case -2:
                        $this->error('用户名密码不匹配！');
                        break;
                    case -3:
                        $this->error('第三方连接错误！');
                        break;
                    case -4:
                        $this->error('该用户被禁用！');
                        break;
                    default :
                        $this->error('登录不成功，请重新登录！');
                }
            }
        }else{
            $this->display();
        }
    }
    /**
     * 完善用户信息
     * @param type $email   邮箱
     * @param type $mobile  联系方式
     * @param type $advantage 擅长领域
     * @param type $provience 省份
     * @param type $city    城市
     */
//    public function complete($email='', $mobile='', $advantage='', $provience='', $city=''){
//        if(IS_POST){
//            $id = session('userinfo')['id'];
//            $data = array(  'id'   => $id,
//                            'email' => $email,
//                            'mobile'=> $mobile,
//                            'advantage' => $advantage,
//                            'provience' => $provience,
//                            'city'  => $city,);
//            $user_extend = M('User_extend')->where(array("id"=>$id))->find();
//            if($user_extend != NULL){
//                $success = M('User_extend')->where( array('id' => $user_extend['id']) )->save($data);
//            }else{
//                $success = M('User_extend')->add($data);
//            }
//            if(!$success){
//                $this->error("更新用户信息出错！");
//            }
//            $this->display('index');
//        }else{
//            $this->display();
//        }
//    }
    
    
    /**
     * 用户信息完善功能，包括对手机号码的验证
     * @param type $mobile      电话号码
     * @param type $verify      验证码
     * @param type $qq          qq号
     * @param type $advantage   有点
     */
    public function certificate($mobile="", $verify="", $qq="", $advantage=""){
        //提交认证信息
        //TODO::手机号码验证
        if(IS_POST){
            //手机短信验证
            echo $verify.'验证码';
            if(session("verify")!=NULL && session("verify")==$verify){
                $userinfo = session('userinfo');
                $id = $userinfo['id'];
                $data = array(  'id'           => $id,
                                'mobile'        => $mobile,
                                'advantage'     => $advantage,
                                'qq'            => $qq,
                                'is_identified' => 1);  //认证成功

                $user_extend = M('User_extend')->where(array("id"=>$id))->find();
                dump($user_extend);
                if($user_extend != NULL){
                    $success = M('User_extend')->where( array('id' => $user_extend['id']) )->save($data);
                }else{
                    $success = M('User_extend')->add($data);
                }
                if(!$success){
                    $this->error("认证用户出错！");
                }
                $this->display('index');
            }else{
                $this->error("验证码错误！");
            }
            
        }else{
            $this->display();
        }
    }

    /**
     * 头像上传
     */
    public function uploadIcon(){
        if(IS_POST){
            $id = $_POST['id'];
            $imageUpload = new ImageController();
            $data = $imageUpload->upload('avatar',TRUE);
            if($data['code'] == 1){
                $user = M('User');
                $data = array('avatar_url' => $data['data'][0], 'id' => $id);
                //如果已存在文件，删除服务器上的文件
                if($avatar = $user->field('avatar_url')->where(array('id' => $id))->find()){
                    unlink($avatar['avatar_url']);                
                }
                $user->save($data);
                var_dump($data);
            }else{
                $this->error('上传失败！');
            }            
        }else{
            $this->display();
        }
    }
    
//    public function 

    /**
     * 根据注册返回值得到注册错误信息
     * @param type $error_id 注册错误码
     * @return string 错误信息
     */
    public function showRegError($error_id){
        switch ($error_id){
            case -1:
                $error = '用户名长度必须在6-16个字符以内！';
                break;
            case -2:
                $error = '用户名只能由数字、字母和"_"组成！';
                break;
            case -3:
                $error = '用户名已存在！';
                break;
            case -4:
                $error = '密码长度最少6个字符！';
                break;
            default :
                $error = '注册失败,未知错误！';
        }
        return $error;
    }
    
    /**
     * 验证码
     */
    public function verify(){
        $verify = new \Think\Verify();
        $verify->entry(1);
    }
    
    /**
     * 分页功能
     */
    public function page(){
        $page = page("User", 5);
        $this->assign('page', $page['page']); // 赋值分页输出
        $this->display();
    }
    
    //手机验证码
    public function verifyMessage(){
        
        $mobile = I("post.mobile");
        $num = $this->randNum();
        $verify_time = C("VERIFY_TIME");
        $verify = new \Api\Controller\MessageVerifyController;
        
        if(session("verify") == NULL){            
            $msg = $verify->sendTemplateSMS($mobile, array($num, $verify_time), 10406);
            if($msg['code'] == 0){
                session(array('verify' => $num, 'expire' => $verify_time*2));
                session("time", time());
                session("times", 1);
            }
            $this->ajaxReturn($msg);
        }else if(session("time")-time() > 60){
            $msg = $verify->sendTemplateSMS($mobile, array($num, 2), session("times")+1);
            if($msg['code'] == 0){
                session(array('verify' => $num, 'expire' => $verify_time*2));
                session("time", time());
                session("times", session("times")+1);
            }
            $this->ajaxReturn($msg);
        }else{
            $this->ajaxReturn(array("code"=>1, "msg"=>"操作太频繁，请稍后重试"));
        }        
    }
    
    //生成6个随机数字做验证码
    public function randNum(){
        $num = "";
        for($i=0; $i<6; $i++){
            $num .= rand(0, 9);
        }
        return $num;
    }
    
    public function upload(){
        
        if($_POST){
            dump($_FILES);
//            $upload = new ImageController();
//            $result = $upload->uploadImg($_FILES, 'test', 1);
//            dump($result);
        } else {
            $this->display();
        }
    }
}